// 测试获取密码页面功能
const auth = require('./mini/utils/auth.js');

// 模拟测试场景
async function testGetPasswordPage() {
  console.log('=== 测试获取密码页面功能 ===');
  
  // 测试1: 检查登录状态
  console.log('\n1. 检查登录状态:');
  try {
    const loginStatus = await auth.checkLoginStatus();
    console.log('登录状态:', loginStatus);
    
    if (!loginStatus.isLoggedIn) {
      console.log('❌ 用户未登录，应该跳转到登录页面');
    } else {
      console.log('✅ 用户已登录');
      
      // 测试2: 检查用户信息完整性
      console.log('\n2. 检查用户信息完整性:');
      const userInfo = auth.getUserInfo();
      console.log('用户信息:', userInfo);
      
      if (!auth.isValidUserInfo(userInfo)) {
        console.log('❌ 用户未绑定手机号，应该跳转到登录页面');
      } else {
        console.log('✅ 用户已绑定手机号，可以访问获取密码页面');
        
        // 测试3: 手机号脱敏显示
        console.log('\n3. 手机号脱敏显示:');
        const phone = userInfo.phone;
        const maskedPhone = '****' + phone.slice(-4);
        console.log('原始手机号:', phone);
        console.log('脱敏手机号:', maskedPhone);
        console.log('页面标题:', `请输入手机号${maskedPhone}接收到的验证码`);
      }
    }
  } catch (error) {
    console.error('❌ 检查登录状态失败:', error);
  }
  
  // 测试4: 密码验证规则
  console.log('\n4. 密码验证规则测试:');
  const testPasswords = ['123', '12345', '123456', '1234567', 'abcdef', '12345a'];
  
  testPasswords.forEach(password => {
    const isValid = password.length === 6 && /^\d{6}$/.test(password);
    console.log(`密码 "${password}": ${isValid ? '✅ 有效' : '❌ 无效'}`);
  });
  
  // 测试5: 输入验证
  console.log('\n5. 输入验证测试:');
  const testInputs = [
    { username: '', sms: '123456' },
    { username: '123456', sms: '' },
    { username: '123', sms: '123456' },
    { username: '123456', sms: '123456' }
  ];
  
  testInputs.forEach((input, index) => {
    const errors = [];
    
    if (!input.username.trim()) {
      errors.push('请输入新密码');
    }
    
    if (!input.sms.trim()) {
      errors.push('请输入验证码');
    }
    
    if (input.username && (input.username.length !== 6 || !/^\d{6}$/.test(input.username))) {
      errors.push('密码必须是6位数字');
    }
    
    console.log(`测试输入 ${index + 1}:`, input);
    if (errors.length > 0) {
      console.log('❌ 验证失败:', errors.join(', '));
    } else {
      console.log('✅ 验证通过');
    }
  });

  // 测试6: onAutoLoginComplete回调功能
  console.log('\n6. onAutoLoginComplete回调功能测试:');
  
  // 模拟页面实例
  const mockPage = {
    data: {
      isLoggedIn: false,
      userInfo: null,
      loginReady: false
    },
    setData(data) {
      this.data = { ...this.data, ...data };
      console.log('页面数据已更新:', data);
    },
    updatePageTitle(phone) {
      if (phone && phone.length >= 4) {
        const maskedPhone = '****' + phone.slice(-4);
        console.log('页面标题已更新:', `请输入手机号${maskedPhone}接收到的验证码`);
      }
    }
  };

  // 测试场景1: 自动登录成功且已绑定手机号
  console.log('\n6.1 测试场景1: 自动登录成功且已绑定手机号');
  const successUserInfo = {
    id: 1,
    phone: '13800138000',
    nickname: '测试用户'
  };
  
  mockPage.onAutoLoginComplete = function(isLoggedIn, userInfo) {
    console.log('收到登录状态更新:', { isLoggedIn, userInfo });
    
    if (isLoggedIn && userInfo) {
      if (auth.isValidUserInfo(userInfo)) {
        this.setData({
          isLoggedIn: true,
          userInfo: userInfo,
          loginReady: true
        });
        this.updatePageTitle(userInfo.phone);
        console.log('✅ 用户已登录且已绑定手机号，页面状态已更新');
      } else {
        console.log('❌ 用户已登录但未绑定手机号，应该跳转到登录页面');
      }
    } else {
      console.log('❌ 自动登录失败，应该跳转到登录页面');
    }
  };

  // 执行测试场景1
  mockPage.onAutoLoginComplete(true, successUserInfo);

  // 测试场景2: 自动登录成功但未绑定手机号
  console.log('\n6.2 测试场景2: 自动登录成功但未绑定手机号');
  const noPhoneUserInfo = {
    id: 1,
    phone: '',
    nickname: '测试用户'
  };
  
  mockPage.onAutoLoginComplete(true, noPhoneUserInfo);

  // 测试场景3: 自动登录失败
  console.log('\n6.3 测试场景3: 自动登录失败');
  mockPage.onAutoLoginComplete(false, null);

  // 测试场景4: 登录状态变化时的页面响应
  console.log('\n6.4 测试场景4: 登录状态变化时的页面响应');
  
  // 模拟页面从未登录状态变为已登录状态
  console.log('初始状态: 未登录');
  mockPage.setData({ isLoggedIn: false, userInfo: null });
  
  console.log('收到登录成功回调...');
  mockPage.onAutoLoginComplete(true, successUserInfo);
  
  console.log('最终状态:', mockPage.data);
}

// 运行测试
testGetPasswordPage().catch(console.error); 